#include<iostream>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<unistd.h>

// 父进程执行过程中执行其他代码
typedef void (*handler_t)();
std::vector<handler_t> handlers;
void fun_one()
{
  printf("这是一个临时任务\n");
}
void fun_two()
{
  printf("临时任务2\n");
}

void Load()
{
  handlers.push_back(fun_one);
  handlers.push_back(fun_two);
}



// 进程非阻塞状态和阻塞状态的调用
int main()
pid_t id = fork();
if(id ==0)
{
  //子进程
  int cnt = 5;
  while(cnt)
  {
    printf("我是子进程:%d\n",cnt--);
    sleep(1);
  }  
  exit(110);
}
se
  {
    int quit = 0;
    while(!quit)
    {
      int status = 0;
      pid_t res = waitpid(-1,&status,WNOHANG);
      if(res>0)
      {
        //等待成功，子进程正常退出
        printf("子进程正常退出，退出码为：%d\n",WEXITSTATUS(status));
        quit = 1;
      }
      else if(res==0)
      {
        printf("子进程仍在运行，暂时未退出，父进程等待中（此时父进程可以处理其他事情）\n");
        //父进程执行其他
       if(handlers.empty()) Load();
       for(auto iter : handlers)
       {
          iter();
       }
      }
      else{
        printf("等待失败\n");
        quit=1;
      }
      sleep(1);
    }
  }
}
